/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import java.util.ArrayList;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import modelo.Usuario;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;



public class UsuarioNegocio  {
    
    private static EntityManagerFactory emf = 
            Persistence.createEntityManagerFactory("Tranex");
    private static EntityManager em = emf.createEntityManager();

    public static void iniciarTransacao() {
        em.getTransaction().begin();
    }
    public static void finalizarTransacao() {
        em.getTransaction().commit();
    }
    public static void limpar() {
        em.clear();
    }
    public static void gravar(Usuario usuario) {
        
        em.persist(usuario);
    }
    
    public static void atualiza(Usuario usuario) {
        
        em.merge(usuario);
    }
    
    public static void excluir(Usuario usuario) {
        em.remove(usuario);
    }
    
    public static Usuario findByPk(Integer codUsuario) {
        return em.find(Usuario.class, codUsuario);
    }
    
    public static ArrayList<Usuario> findBy(Usuario usuario){
    	ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
    	Session session = HibernateUtil.getSessionFactory().openSession();
    	Example parametro = Example.create(usuario)
    	.excludeZeroes() //exclude zero valued properties
    	.ignoreCase() //perform case insensitive string comparisons
    	.enableLike(MatchMode.ANYWHERE)//use like for string comparisons
    	; 

      	  Criteria criteria = session.createCriteria(usuario.getClass()).add( parametro);
    	
    	  usuarios= (ArrayList<Usuario>) criteria.list();
    	return usuarios;
    	
    }
    
    public static ArrayList<Usuario> findAll(){
    	ArrayList<Usuario> usuarios = (ArrayList<Usuario>) em.createQuery("from Usuario usuario ORDER BY usuario.codUsuario").getResultList();
    	return usuarios;
    	
    }
    
}
